/*
 * @(#)InputConnector.java	1.5 02/08/21
 *
 * Copyright (c) 1996-2002 Sun Microsystems, Inc.  All rights reserved.
 */

package com.sun.media;

import javax.media.Buffer;

/**
 * InputConnector defines the buffer movement and format typing
 * interface for input connectors.
 *
 * @see OutputConnector
 *
 */
public interface InputConnector extends Connector {

    /**
     * Return the OutputConnector this InputConnector is connected
     * to.  If this Connector is unconnected return null.
     */
    public OutputConnector getOutputConnector();
    /**
     * Sets the OutputConnector this InputConnector is connected
     * to.  This method is called by the connectTo() method of the OutputConnector.
     */
    public void setOutputConnector(OutputConnector outputConnector);

    /**
     * checks if there are valid Buffer objects in the Connector's queue.
     * @return if there are vaild Buffer objects in the Connector's queue.
     */
    public boolean isValidBufferAvailable();

    /**
     * Get buffer object containing media.<br>
     * The exact behavior depands on the protocol:
     * <ul>
     * <li><b>ProtocolPush</b> - if buffer is not available throws RuntimeException </li>
     * <li><b>ProtocolSafe</b> - if buffer is available read the buffer and perform notify() on the connection.<br>
     * if buffer is not available perform wait() on the connection. </li>
     * </ul>
     *
     */
    public Buffer getValidBuffer();
    /**
     * Indicates the oldest Buffer object got from this Connector was used and can
     * be "recycled" by the upstream Module.<br>
     * if such buffer Objects does not exists throws RuntimeException.
     * The exact behavior depands on the protocol:
     * <ul>
     * <li><b>ProtocolPush</b> - no operation. </li>
     * <li><b>ProtocolSafe</b> - perform notify() on the connection lock object.<br>
     * </ul>
     *
     */
    public void readReport();

}
